// Alarma.cpp : Defines the entry point for the console application.
// compile with: /EHsc

/**
* /brief Itse alarma. Hoitaa argumentit ja sen mukaan kutsuu funktioita.
* Monet "ratkaisut" voivat olla kyseenalaisia, koska minulla ei ole viela C++ kurssia suoritettuna
* Kiitos ja anteeksi
* @author Niko Salonen
* @version 0.02 Mystic Mango
*/
 
#include <iostream>
#include <ctime>
#include <fstream>
#include <string>
#include <Windows.h>
#include <tchar.h>
#include "AlarmaDLL.h"
#include "stdafx.h"

using namespace std;
using namespace AlarmaFuncs;

Wakeup mwakeup;
int tmp;
char temp;
int valinta;
char aikaStr[9];
char pvmStr[9];
char* pCommandLineFileName;

/**
* intro() kysyy menuvalintoja.
* valintaan otetaan sisaan kayttajan menuvalinta
* ja valinta valitetaan DLL luokkaan
*/
void intro()
{
	valinta = mwakeup.intro(valinta);
	mwakeup.menu(valinta);
}

/**
* paaohjelma() rullaa itsensa ympari niin kauan kunnes menusta valitaan 4.
* muutoin kutsutaan intro() funktiota
*/
void paaohjelma()
{
	while(valinta!=4)
	{
		intro();
		valinta = 0;
	}
}

int main(int argc, char* argv[])

{

#ifndef _WIN64 || _WIN32


	try
	{

	HKEY hKey;
	DWORD buffersize = 1024;
	DWORD minuutti;
	DWORD minuuttiSize = sizeof(DWORD);
	DWORD dwType, dwSize;
	dwType = REG_DWORD;
	LPCTSTR sk = TEXT("Software\\Alarma");
	RegCreateKeyEx(HKEY_CURRENT_USER, sk, 0, NULL, 0, 0, NULL, &hKey, NULL);
	RegOpenKeyEx(HKEY_CURRENT_USER, sk, NULL, KEY_ALL_ACCESS, &hKey);
	RegQueryValueEx(HKEY_CURRENT_USER, TEXT("minuutti"), NULL, &dwType,(PBYTE)&minuutti,&minuuttiSize);

	


		for (int i = 0 ; i <= (int)(argc-1) ; i++){
			
			if(argc-1 == 0){ 
				paaohjelma();
			}

			else if(string(argv[i]) == "-h")
			{
				cout << "\n\t\tHelppi:" << endl;
				cout << "\n\t\t-h\ttulostaa taman helpin." << endl;
				cout << "\n\t\t-mk\tMunakello. Kayta: -mk <minuutti> (1-60 minuuttia)" << endl;
				cout << "\n\t\t-mp3\tOmavalintainen halytysaani. Kayta: -mp3" << endl;
				cout << "\t\t\tpolku haluamaasi tiedostoon>" << endl;
				cout << "\n\t\t-v\tTulostaa Alarman version sinun ihmeteltavaksesi!" << endl;
				cout << "\n\n\t\t";
				system("pause");
				mwakeup.loppu();
			}


			else if((string(argv[i])) == "-mp3")
			{ 
				if(argv[i+1] != NULL)
				{
					
					pCommandLineFileName = (char*)(argv[i+1]);

					mwakeup.biisi(pCommandLineFileName);
				}
					else
				{
					cout << "\n\t\tJokin meni vikaan\n\t\t" << endl;
					system("pause");
				}
				
			}
			
			else if((string(argv[i])) == "-mk") 
			{
				if ((argv[i+1] == NULL) || (string(argv[i+1]) == "mp3")) {
					(int)RegQueryValueEx(hKey,TEXT("minuutti"),NULL,NULL,(PBYTE) &minuutti, &minuuttiSize);
					cout << "\n\t\tEi munakellon arvoa. Haetaanko viimeisin arvo rekisterista?" << endl;
					cout << "\n\t\tRekisteriin tallennettu arvo on talla hetkella: " << minuutti << " min" << endl;
					cout << "\n\t\t1: Haetaan!" << endl;
					cout << "\n\t\t2: Lopetetaan, uusi yritys. " << endl;
					cout << "\n\t\t>> ";
					int valinta;
					cin >> valinta;

					if (valinta == 1)
					{
						
						mwakeup.aalarma((int)minuutti);
						RegCloseKey(hKey);
					}
					else
					{
						mwakeup.loppu();
					}
				}
				else{
				tmp = atoi(argv[i+1]);
				minuutti = tmp;
				RegSetValueEx(hKey,TEXT("minuutti"), 0, REG_DWORD,(PBYTE) &minuutti,minuuttiSize);
				RegCloseKey(hKey);
				}
				

			}
			else if (string(argv[i]) == "-v")
			{
				mwakeup.versio();
				
				
			}
		}

				if(tmp == NULL)
				{
					paaohjelma();
				}
				else
				{
				mwakeup.aalarma(tmp);
				}




					
			}
		
			
			


	
	catch(exception& e) {
        cerr << "error: " << e.what() << "\n";
        return 1;
    }
    catch(...) {
        cerr << "Exception of unknown type!\n";
    }



#else



cout << "Sorry! Windows only!" << endl;
system("pause");
	


#endif



	return 0;
}

